package org.jawa.exam.paper;

import java.util.Collection;
import java.util.List;

import org.jawa.exam.model.Paper;

/**
 * 
 * 类文件: PaperProvider
 * <p>
 * <p>
 * 类描述：试卷表接口
 * <p>
 * 作     者： wangyg
 * <p>
 * 日     期： 2012-8-1
 * <p>
 * 时     间： 下午1:46:55
 * <p>
 */
public interface PaperProvider {
	
	/**
	 * 创建试卷信息.
	 * 
	 * @param paper 试卷信息.
	 * @return 创建好的试卷信息实例.
	 * @throws Exception 创建试卷信息异常.
	 */
	public Paper createPaper(Paper paper) throws Exception;
	
	/**
	 * 删除试卷信息。
	 * 
	 * @param PaperID
	 *            要删除试卷信息的 PaperID.
	 * 
	 */
	public void deletePaper(Long paperID);

	/**
	 * 返回总的试卷信息数.
	 * 
	 * @return 总的试卷信息数.
	 * 
	 */
	public int getPaperCount();
	
	/**
	 * 返回系統中所有试卷信息的 PaperId.
	 * 
	 * @return 不可以修改的系統中试卷信息的 PaperId集合.
	 * 
	 */
	public Collection<Long> getPaperIds();

	/**
	 * 返回所有的试卷信息（试卷信息集合）,{@link PaperCollection} 集合用于协助这个返回结果，他需要一个Long[] Paperid
	 * 的数组，在实际需要数据的时候再{@link PaperManager#getPaper()}进行查询实际数据.
	 * 
	 * @return 不可以修改的试卷信息集合.
	 */
	public Collection<Paper> getPapers();

	/**
	 * 返回所有的试卷信息（试卷信息集合）,{@link PaperCollection} 集合用于协助这个返回结果，他需要一个Long[] Paperid
	 * 的数组，在实际需要数据的时候再{@link PaperManager#getPaper()}进行查询实际数据.
	 * 
	 * @param startIndex
	 *            起始索引.
	 * @param numResults
	 *            要显示的试卷信息数据数量.
	 * @return 不可以修改的试卷信息集合.
	 * 
	 */
	public Collection<Paper> getPapers(int startIndex, int numResults);

	/**
	 * 根据查询条件查询符合条件的的试卷信息信息。
	 * 
	 * @param fieldQuerys
	 *            要查询的条件信息.
	 * 
	 * @return 查询到的试卷信息信息结果.
	 * 
	 */
	public Collection<Paper> findPapers(List<String> fields, List<String> querys);
	
	/**
	 * 根据试卷信息编号获取对象
	 * @param paperId 试卷信息编号
	 * @return 返回获取的对象实例
	 */
	public Paper loadByPaperId(Long paperId);

}
